package jaux.tank.service.system;


import java.util.List;
import java.util.Optional;

import javax.validation.constraints.NotNull;

import jaux.tank.bean.entity.system.EntityExtension;
import jaux.tank.bean.vo.EntityQueryCondition;
import jaux.tank.utils.factory.Page;

/**
 * 实体扩展属性服务接口
 *
 * @author hxd
 */
public interface EntityExtensionService {

	/**
	 * 分页查询实体扩展属性.
	 * @param list entity query conditions
	 *
	 * @param page the page
	 * @return the page
	 */
	public Page<EntityExtension> query(List<EntityQueryCondition> list, Page<EntityExtension> page);
	
	/**
	 * 通过id获取实体扩展属性.
	 *
	 * @param id 实体扩展属性id
	 * @return 实体扩展属性
	 */
	public Optional<EntityExtension> get(@NotNull String id);
	
	/**
	 * 新增实体扩展属性.
	 *
	 * @param entityExtension 实体扩展属性
	 * @return 实体扩展属性
	 */
	public EntityExtension add(@NotNull EntityExtension entityExtension);
	
	
	/**
	 * 删除实体扩展属性.
	 *
	 * @param id 实体扩展属性id
	 */
	public void remove(@NotNull String id);
	
	/**
	 * 删除实体扩展属性.
	 *
	 * @param entity 实体
	 * @param entityId 实体id
	 */
	public void removeByEntityId(String entity, String entityId);
	
	
	/**
	 * 获取实体扩展属性
	 * @param entity 实体
	 * @param entityId 实体id
	 * @return
	 */
	public List<EntityExtension> queryEntityExtensions(String entity, String entityId, String name);
	
	/**
	 * 更新实体扩展属性.
	 *
	 * @param entityExtension 实体扩展属性
	 * @return 实体扩展属性
	 */
	public EntityExtension update(@NotNull EntityExtension entityExtension);
}
